package algorithmic_data_structure.图.三件套;

public class GraphGenerator {
    /**
     * 一般图的题目给数据都是边的数组 一维数组中 第一个值表示边的权重，第二个表示边的起点，第三个表示边的终点
     *  有向图和无向图 都可以 用有向图表示
     *  [1,0,2]
     *  [2,0,5]
     *  [3,0,6]
     *  [2,1,3]
     *  [6,1,4]
     *  [3,2,1]
     *  [7,2,5]
     *  [1,2,7]
     *  ......
     *
     */
    public Graph generateGraph(int[][] matrix){
        Graph graph = new Graph();
        for (int i = 0; i < matrix.length; i++) {
            int weight = matrix[i][0];
            int start = matrix[i][0];
            int end = matrix[i][0];
            if (!graph.nodes.containsKey(start)){
                //图中先前还没放入这个节点
                graph.nodes.put(start,new Node(start));//没说节点值是什么，随便取一个先
            }
            if (!graph.nodes.containsKey(end)){
                graph.nodes.put(end,new Node(end));
            }
            Node from = graph.nodes.get(start);
            Node to = graph.nodes.get(end);
            from.nexts.add(to);
            Edge edge = new Edge(weight ,from ,to);
            from.out++;
            to.in++;
            from.edges.add(edge);
            graph.edges.add(edge);
        }
        return graph;
    }

}
